package Dominio;

import Datos.GestorUsuarios;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Victor Varias Perez
 * Cluster y grupo: C8G3
 * Creado el 18-abr-2010 20:51:46
 * 
 * Objetivo de la clase: Definir los atributos del jugador y los métodos
 * que afectan a éstos.
 * Clases utilizadas: Mazo, Carta, Usuario, Estadisticas
 */
public class JugadorRemigio extends Jugador{

/** Definición atributos */

    /**
     *  Cantidad de puntos que tiene el jugador
     */
    int puntos;
    
    /**
     * Cierto si el jugador es el ganador
     */
    boolean ganador;

    /**
     * Usuario que tiene a este jugador
     */
    Usuario user;

    /**
     * Contiene el motor de inferencia asociado
     * IER == null <=> usr.humano
     */
    IERemigio ier;

    /**
     * Contiene las cartas que tiene el jugador en su mano
     */
    Mazo mano;

    /**
     * Constructor que inicializa llamando a la función NuevaMano()
     * @param -
     * @return -
     * @throws -
     */
    public JugadorRemigio(Usuario usr, IERemigio ie){
        this.user = usr;
        this.ier = ie;
        NuevaMano();
        ganador = false;
        puntos=0;
    }

    /**
     * Inicializa las variables y la mano que tiene el jugador
     * @param -
     * @return -
     * @throws -
     */
    public void NuevaMano(){
        mano = new Mazo(0, true);
        puntos = 0;
    }

    /**
     * Nos añade a la mano la carta c
     * @param c carta a añadir
     * @return -
     * @throws -
     */
    public void Coger(Carta c){
        mano.introducir_carta(1, c);
    }

    public void CogerMas(Carta c){
        mano.introducir_carta(11, c);
    }

    /**
     * Descartamos de la mano la carta de la posición i
     * @param i Posición de la carta en nuestra mano
     * @return -
     * @throws -
     */
    public Carta Descartar ( int i){

        Carta c = new Carta();
        c = mano.consultar_carta(i);
        mano.eliminar_carta(i);
        return c;
    }

    /**
     * Cambia el valor del atributo puntos
     * @param i nuevo valor para el atributo puntos
     * @return -
     * @throws -
     */
    public void SetPuntos (int i){
        this.puntos = i;
    }

    /**
     * Nos devuelve el valor del atributo puntos
     * @param -
     * @return puntos del jugador
     * @throws -
     */
    public int GetPuntos (){
        return this.puntos;
    }

    /**
     * Intercambia las cartas de la posición i y j
     * @param i Carta a cambiar
     * @param j Carta a cambiar
     * @return -
     * @throws -
     */
    public void Reordenar(int i, int j){
        mano.intercambiar_carta(i, j);
    }
    /**
     * Devuelve la mano actual del jugador
     * @param -
     * @returnMano del jugador
     * @throws -
     */
    public Mazo DevolverMano(){
        return this.mano;
    }

    public void SetGanador(boolean b){
        this.ganador = b;
    }

    public boolean GetGanador(){
        return this.ganador;
    }
    /**
     * Clase que se encarga de actualizar las estadisticas del usuario que controla al jugador
     * @param -
     */
    public void ActualizaEstadisticas(){
        Estadisticas est = new Estadisticas();
        est = user.getEst();
        int pnts = est.getPuntuacionMedia();
        int ptds = est.getPartidasJugadas();
        int tmp = pnts*ptds+puntos;
        ptds++;
        tmp = tmp/ptds;
        est.setPartidasJugadas(ptds);
        est.setPuntuacionMedia(tmp);
        if (ganador){
            int gnds = est.getPartidasGanadas();
            est.setPartidasGanadas(gnds);
        }
        //Guardamos al jugador en disco
        try{
            GestorUsuarios.guardarJugador(user,user.getLogin());
        }
        catch (UsuariExistent e){

        }
        
    }
    public boolean EsHumano(){
        return ier == null;
    }

    public IERemigio GetIE(){
        return ier;
    }

    public Usuario GetUser(){
        return user;
    }

    }


